package com.free.utils;

import com.free.exception.SystemException;

import java.io.*;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
public class SearlizeUtils {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    public static byte[] serialize(Object obj) throws SystemException {
        if(obj == null){
            return null;
        }
        ByteArrayOutputStream baos = null;
        ObjectOutputStream oos = null;
        try {
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(obj);
            return baos.toByteArray();
        } catch (IOException e) {
            throw new SystemException("SearlizeUtils.serialize对象序列化时发生异常", e);
        }
    }

    public static <T> T unSerialize(byte[] content) throws SystemException {
        if(content == null || content.length == 0){
            return null;
        }
        ByteArrayInputStream bais = null;
        ObjectInputStream ois = null;
        try {
            bais = new ByteArrayInputStream(content);
            ois = new ObjectInputStream(bais);
            return (T)ois.readObject();
        } catch (Exception e) {
            throw new SystemException("SearlizeUtils.unSerialize对象反序列化失败", e);
        }
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
